<html>
  <head>
	  <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>i5ting_ztree_toc:</title>
		<link href="toc/style/github-bf51422f4bb36427d391e4b75a1daa083c2d840e.css" media="all" rel="stylesheet" type="text/css"/>
		<link href="toc/style/github2-d731afd4f624c99a4b19ad69f3083cd6d02b81d5.css" media="all" rel="stylesheet" type="text/css"/>
		<link href="toc/css/zTreeStyle/zTreeStyle.css" media="all" rel="stylesheet" type="text/css"/>
	  <style>
		pre {
		    counter-reset: line-numbering;
		    border: solid 1px #d9d9d9;
		    border-radius: 0;
		    background: #fff;
		    padding: 0;
		    line-height: 23px;
		    margin-bottom: 30px;
		    white-space: pre;
		    overflow-x: auto;
		    word-break: inherit;
		    word-wrap: inherit;
		}

		pre a::before {
		  content: counter(line-numbering);
		  counter-increment: line-numbering;
		  padding-right: 1em; /* space after numbers */
		  width: 25px;
		  text-align: right;
		  opacity: 0.7;
		  display: inline-block;
		  color: #aaa;
		  background: #eee;
		  margin-right: 16px;
		  padding: 2px 10px;
		  font-size: 13px;
		  -webkit-touch-callout: none;
		  -webkit-user-select: none;
		  -khtml-user-select: none;
		  -moz-user-select: none;
		  -ms-user-select: none;
		  user-select: none;
		}

		pre a:first-of-type::before {
		  padding-top: 10px;
		}

		pre a:last-of-type::before {
		  padding-bottom: 10px;
		}

		pre a:only-of-type::before {
		  padding: 10px;
		}

		.highlight { background-color: #ffffcc } /* RIGHT */
		</style>
  </head>
  <body>
	  <div>
				<div style='width:25%;'>
						<ul id="tree" class="ztree" style='width:100%'>

						</ul>
				</div>
        <div id='readme' style='width:70%;margin-left:20%;'>
          	<article class='markdown-body'>
            	<h1 id="-nodejs-">一、Nodejs课程</h1>
<blockquote>
<p>目标:</p>
<ol>
<li>能够熟悉Nodejs编写API接口</li>
<li>熟悉Nodejs开发环境、NPM的安装工具。</li>
<li>熟悉模块化编程</li>
<li>熟悉Nodejs的框架 （Express、KOA、EGG....）</li>
<li>熟练对接Nodejs或者其他语言编写的API接口</li>
</ol>
</blockquote>
<h1 id="-nodejs-">二、Nodejs的前言</h1>
<h2 id="2-1-nodejs-">2.1 Nodejs到底是什么？</h2>
<p>Nodejs是什么？</p>
<p>没有学习Nodejs之前 js代码只能在浏览器中运行。js需要解析？chrome V8 。。。sarafi 。。。jscore解析。。。</p>
<p>Chrome V8性能高，Nodejs开发团队单独将Chrome V8引擎从chrome中提取出来。开让v8引擎解析执行js代码。</p>
<p>Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。</p>
<p>nodejs 、框架、mysql、mysql与框架接口（API）、前端和后台对接</p>
<h2 id="2-2-nodejs-">2.2 Nodejs下载安装</h2>
<h3 id="2-2-1-cmd-">2.2.1 cmd命令打开</h3>
<ul>
<li>window+R -&gt; cmd</li>
<li>按住shift-&gt; 右键</li>
<li><p>在资源管理器中 输入cmd</p>
<p><strong>常见命令有哪些: </strong></p>
</li>
</ul>
<blockquote>
<p>cd: 进入某一个目录</p>
<p>cls：清除屏幕</p>
<p>tab键: 补全</p>
<p>esc键: 清除命令</p>
<p>上下键: 历史记录</p>
<p>touch: 创建一个文件</p>
<p>echo:  输出字符串  ； echo &quot;123&quot;&gt;1.txt</p>
<p>ls: 显示当前目录的文件及其文件夹</p>
<p>ipconfig: 查看你电脑的ip信息</p>
<p>ping:  查看电脑和ping的地址是否连通。</p>
<p>C:\Windows\System32\drivers\etc\hosts:  是将一个域名映射到某一个IP地址。</p>
</blockquote>
<h3 id="2-2-2-node-">2.2.2 测试node是否安装成功</h3>
<p>安装完成测试是否安装完毕</p>
<p>打开cmd命令窗口输入：</p>
<pre><code class="lang-cmd">node -v
</code></pre>
<h3 id="2-2-3-node-nvm-nvm-nodejs-">2.2.3 切换Node的版本--NVM （一般情况下不需要使用nvm，但是如果电脑上需要配置多个版本的nodejs 就需要了）</h3>
<ul>
<li>1.安装NVM</li>
<li>2.使用nvm list available 查看可以安装的nodejs的版本</li>
<li>3.使用nvm安装 nodejs，nvm install nodejs版本</li>
</ul>
<h3 id="2-2-4-nodejs-">2.2.4 Nodejs和浏览器的区别</h3>
<p>ECMAscript + DOM的API + BOM的API --  浏览器上的编程了</p>
<p>ECMAscript + Nodejs的API  -- 后台开发</p>
<h1 id="-nodejs-">三、Nodejs的基础语法 -- 内置模块</h1>
<h2 id="3-1-">3.1 全局变量</h2>
<ul>
<li>module</li>
<li>__dirname</li>
<li>__filename</li>
<li>process  process.env</li>
</ul>
<h2 id="3-2-">3.2 模块化？</h2>
<p>将js和js之间联系到一块就是模块化。common.js标准规范 就是后台开发的一种模块化规范。</p>
<p>一个js文件就是一个模块（module）。</p>
<p>module.exports = {}  // 导入导出</p>
<p>require()</p>
<ul>
<li>使用commonjs规范完成nodejs开发的模块化</li>
<li>commonjs规范怎么使用？使用module.exports 导出，require()函数进行导入</li>
</ul>
<h2 id="3-3-">3.3 模块化需要分类</h2>
<ul>
<li><p>自定义模块</p>
<p>自己定义的模块</p>
</li>
<li><p>内置模块</p>
<p> Nodejs已经帮你写好的模块</p>
</li>
</ul>
<h2 id="3-4-fs-">3.4 内置模块 - fs模块</h2>
<p><strong>提前讲解路径问题：</strong></p>
<p>./ ： 当前目录</p>
<p>../ : 上级目录</p>
<p>/:    根目录</p>
<p><strong>编码格式：</strong></p>
<p>utf-8： 统一所有的编码</p>
<p>gb2312：想要显示中文</p>
<p>gbk：国标扩展</p>
<p>ASCII： 没有中文， 美国佬</p>
<ul>
<li><p>读取文件</p>
<pre><code class="lang-javascript">const fs = require(&quot;fs&quot;)
// console.log(fs)

// 这个函数是异步代码
fs.readFile(&quot;./1.txt&quot;, &#39;utf-8&#39;, function(err, data) {
    console.log(data)
})
</code></pre>
</li>
<li><p>写入文件</p>
<pre><code class="lang-javascript">const fs = require(&quot;fs&quot;)
fs.writeFile(&quot;./1.txt&quot;, &quot;helloworld&quot;, &quot;&quot;, function() {})

// writeFileSync
</code></pre>
</li>
</ul>
<h2 id="3-5-path-">3.5 Path模块</h2>
<ul>
<li><p>path.resolve()</p>
<p>path.resolve(&quot;./1.txt&quot;)</p>
</li>
<li><p>path.join()</p>
<p>path.join(__dirname,  &quot;&quot;)</p>
</li>
</ul>
<h2 id="3-6-http-">3.6 http模块</h2>
<ul>
<li><p>const server = http.createServer()</p>
</li>
<li><p>server.listen(3000)</p>
</li>
<li><p>server.on(&quot;request&quot;, (req, res)=&gt; {})</p>
<p>req.url   req.method</p>
<p>res.end()</p>
<p>res.setHeader()</p>
</li>
<li><p>解析post请求过程中</p>
<p>const qs = require(&quot;querystring&quot;)</p>
<p>req.on(&quot;data&quot;, (chunk)=&gt; {</p>
<p>   postData += chunk</p>
<p>})  </p>
<p>req.on(&quot;end&quot;, ()=-&gt; {</p>
<p>​    qs.parse(postData) // name=&quot;&quot;&amp;age=11  =&gt; {name:&quot;&quot;, age:111}</p>
<p>})</p>
</li>
</ul>
<h1 id="-nodejs-">四、Nodejs -- 第三方模块</h1>
<h2 id="4-1-">4.1 第三方模块怎么进行使用？</h2>
<h3 id="4-1-1-npm-">4.1.1 npm是什么？</h3>
<p>npm全称: node package manager   node包管理工具</p>
<p>可以下载 移除  。。。。。。</p>
<p>从哪里下载? </p>
<p><a href="https://www.npmjs.com">https://www.npmjs.com</a></p>
<p>是咱们第三方模块的查询网站。node 包是世界上最大的社区  （ios android）</p>
<h3 id="4-1-2-npm-">4.1.2 使用npm命令</h3>
<p>只要你安装了nodejs，就会自带npm命令</p>
<pre><code class="lang-javascript">npm -v
</code></pre>
<ul>
<li><p>安装第三方模块(包)</p>
<pre><code class="lang-javascript">npm install 包名
// 会生成几个文件或者文件夹
node_modules: 所有包的文件目录
package.json: 里面解释依赖的包的信息
package-lock.json：

npm install jquery@3.5.0 // 使用npm下载时指定包的版本号
                   大版本号
                   功能版本号
                   bug版本号
                   APP -- 2.10.1  
</code></pre>
</li>
<li><p>使用第三方模块（包）</p>
<pre><code class="lang-javascript">const jquery = require(&quot;jquery&quot;)
</code></pre>
</li>
<li><p>其他命令</p>
<pre><code class="lang-java">npm init -- 生成了一个package.json文件
</code></pre>
</li>
</ul>
<h3 id="4-1-3-package-json-">4.1.3 package.json文件</h3>
<p>  dependencies： 开发和上线阶段都需要依赖  {包名: 版本号}</p>
<p>  文件作用： 保存该项目依赖哪些包 还有项目信息</p>
<p> devDependencies：开发阶段依赖的包</p>
<h3 id="4-1-4-npm-">4.1.4 npm命令扩展</h3>
<pre><code class="lang-javascript">npm uninstall moment -- 卸载第三方包

npm install moment  --save    一般使用简写   npm i moment -S

npm install moment --development  一般使用简写 npm i moment -D

// 从官方地址下载会很慢registry.npmorj.com
npm config set registry https://registry.npm.taobao.org/  // 当你去下载包的时候去淘宝镜像官方网站下载
npm config get registry // 查看第三方包 从哪里下载。


npm install express-generator -g
</code></pre>
<h2 id="4-2-">4.2 第三方包的搜索机制原理（原理）</h2>
<pre><code class="lang-javascript">const _ = require(&quot;moment&quot;)

// 1.在当前的文件夹中搜索node_modules，如果当前的文件夹中没有该目录，往上级找
D:\ftp\210\Nodejs\02-第三方模块\myprj\node_modules
D:\ftp\210\Nodejs\02-第三方模块\node_modules
D:\ftp\210\Nodejs\node_modules
D:\ftp\210\node_modules
D:\ftp\node_modules
D:\node_modules
// 2.找moment文件夹，并且找到文件夹中的package.json文件

// 3.在package.json文件中查找main，main的值就是最终加载的js文件
</code></pre>
<h1 id="-nodejs-">五、Nodejs-自定义模块</h1>
<p>将自定义模块，变为了第三方模块。</p>
<ol>
<li>注册npm账号 -- 邮箱验证</li>
<li>npm init -y生成package.json ，将package中的信息补充完整</li>
<li>在工程中使用                               npm login </li>
<li>将工程publish到npm官方中去  npm publish</li>
</ol>
<h1 id="-express">六、Express</h1>
<p>基于 <a href="https://nodejs.org/en/">Node.js</a> 平台，快速、开放、极简的 Web 开发框架。</p>
<ul>
<li>npm install express-generator -g </li>
<li>express 06-myprj</li>
<li>切换到06-myprj文件夹中，使用 npm install</li>
<li>启动项目：  需要查看package.json文件中scripts</li>
</ul>
<p><strong>supervisor工具</strong></p>
<p>npm install supervisor -g</p>
<p>supervisor bin/www</p>
<p><strong>总结:</strong></p>
<ul>
<li>1.安装express-generator安装器</li>
<li>2.express myprj</li>
<li>3.cd myprj </li>
<li>4.npm install </li>
<li>5.npm start</li>
</ul>
<blockquote>
<ul>
<li><p>增加api接口</p>
<ol>
<li><p>在app.js中匹配一个路径</p>
<pre><code class="lang-javascript">app.use(&#39;/api&#39;, apiRouter);
</code></pre>
</li>
<li><p>定义apiRouter</p>
<pre><code class="lang-javascript">var apiRouter = require(&#39;./routes/api&#39;);
</code></pre>
</li>
<li><p>定义api.js文件</p>
<pre><code class="lang-javascript">var express = require(&#39;express&#39;);
var router = express.Router();

var arr = [
   {
       id:1,
       name: &quot;xiaogang&quot;,
       age: 30
   }
]

/* GET home page. */
router.get(&#39;/getStudent&#39;, function(req, res, next) {
   // res.end()  send
   res.send(arr)
});

router.post(&quot;/addStudent&quot;, function(req, res, next) {
   // console.log(req.body)
   arr.push({
       id: arr.length+1,
       name: req.body.name,
       age: req.body.age
   })
   res.send({
       status: 1,
       message: &quot;添加成功&quot;
   })
})

router.delete(&quot;/deleteStudent/:id&quot;, function(req, res, next) {
   console.log(req.params.id)
   arr = arr.filter((item)=&gt; {
       return item.id != req.params.id
   })

   res.send({
       status:1,
       message: &quot;删除成功&quot;
   })
})

module.exports = router;

</code></pre>
</li>
</ol>
</li>
</ul>
</blockquote>

          	</article>
        </div>
		</div>
  </body>
</html>
<script type="text/javascript" src="toc/js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="toc/js/jquery.ztree.all-3.5.min.js"></script>
<script type="text/javascript" src="toc/js/ztree_toc.js"></script>
<script type="text/javascript" src="toc_conf.js"></script>

<SCRIPT type="text/javascript" >
<!--
$(document).ready(function(){
    var css_conf = eval(markdown_panel_style);
    $('#readme').css(css_conf)
    
    var conf = eval(jquery_ztree_toc_opts);
		$('#tree').ztree_toc(conf);
});
//-->
</SCRIPT>